/**
 * 
 */
package com.iknight.mgr.api;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.github.pagehelper.PageInfo;
import com.iknight.mgr.core.annotation.ShiroEffectAnnotation;
import com.iknight.mgr.core.base.BaseService;

/**
 * 
 * @author Jeryzym
 * @param <T>
 *
 * @param <T>
 * @param <PK>
 * @param <PK>
 */
public interface RoleService<T extends Serializable, PK extends Serializable> extends BaseService<T, PK> {
	/**
	 * 定义角色与菜单、角色与权限、角色与人的关系
	 */
	/**
	 * 
	 * @description 生成角色与用户关系
	 * @param params
	 *
	 */
    void grantRoleToUser(Map<String, Object> params);

	/**
	 * 
	 * @description 生成角色与权限关系
	 * @param params
	 *
	 */
	@ShiroEffectAnnotation(enable = true)
    void grantPermToRole(Map<String, Object> params);

	/**
	 * 
	 * @description 生成角色与菜单关系
	 * @param params
	 *
	 */
    void grantMenuToRole(Map<String, Object> params);

	/**
	 * 
	 * @description 根绝角色获取菜单
	 * @param roleId
	 * @return
	 *
	 */
    List<Map> getMenusByRoleId(String roleId);

	/**
	 * 
	 * @description 根据用户ID获取菜单
	 * @param userId
	 * @return
	 *
	 */
    List<Map> getMenusByUserId(String userId);

	/**
	 * 
	 * @description 根据角色获取权限
	 * @param roleId
	 * @return
	 *
	 */
//	public PageInfo<Map> getPermsByRoleId(String roleId, int pageStart, int pageSize);

	/**
	 * 
	 * @description 根据用户ID获取权限
	 * @param userId
	 * @return
	 *
	 */
    List<Map> getPermsByUserId(String userId);

	/**
	 * 
	 * @description
	 * @param username
	 * @return
	 *
	 */
    List<Map> getPermsByUsername(String username);

	/**
	 * 
	 * @description
	 * @param roleId
	 * @param userID
	 * @return
	 *
	 */
    List<Map> getMenusByUserIdWithRoleId(String roleId, String userID);

	/**
	 * 
	 * @description
	 * @param roleId
	 * @param userId
	 * @return
	 *
	 */
    List<Map> getPermsByUserIdWithRoleId(String roleId, String userId);

	/**
	 * 
	 * @description
	 * @param userId
	 * @return
	 *
	 */
    List<Map> getRolesByUserId(String userId);

	/**
	 * 
	 * @description
	 * @param username
	 * @return
	 *
	 */
    List<Map> getRolesByUsername(String username);

	/**
	 * 
	 * @description
	 * @param userId
	 * @return
	 *
	 */
    Object getRoleDefinedURIByUsername(String username);

    List<Map> getMenusByUsername(String username);

    T getRecordByCode(String roleCode);

    PageInfo<Map> getUsersByRoleId(String roleId, int pageStart, int pageSize);

    List<Map> getPermsByRoleId(String roleId);

    List<Map> getUsersByRoleId(String roleId);
}
